iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 6
2
Software Development

Android animation 30天上手系列 第 6

Day06 Property Animation

  • 分享至 

  • xImage
  •  

這篇將說明另一種動畫方式Property animation的objectAnimator。

Property animation 依字面上的解釋就是透過動畫改變物件的屬性。Property animation 以XML定義的動畫,在動畫的期間修改目標對象的屬性,從而使對象展現出動畫效果。例如背景顏色或透明度。View animation 只能用在view,且改變的是View的繪制效果,View真正的屬性並沒有改變。而Property animation則是真的會改變物件的屬性。

使用Property Animation很簡單,只要2個步驟
步驟1:在res/animator 新增 anim_alpha.xml
使動畫期間1000毫秒修改物件的alpha屬性值至0.1

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:propertyName="alpha"
    android:valueTo="0.1f" />

步驟2:在textView使用anim_alpha動畫:在Activity 呼叫 AnimatorInflater.loadAnimator

AnimatorInflater.loadAnimator(this, R.animator.anim_alpha)
        .apply {
            setTarget(textView)
            start()
        }

Demo

objectAnimator 各個屬性

duration 動畫持續的時間(毫秒)
android:startOffset 動畫開始執行前的等待時間
propertyName 動畫改變的屬性

  • android:propertyName="BackgroundColor"改變背景顏色
  • android:propertyName="x",改變x軸位置
  • android:propertyName="rotation", z軸旋轉
  • android:propertyName="scaleX" ,X放大
  • android:propertyName="alpha",改變透明度

valueFrom 動畫開始的值
valueTo 動畫結束的值
android:interpolator 加速度
android:repeatCount 重覆執行次數
android:repeatMode 動畫重覆執行的方式

  • restart 重覆執行時從起點開始
  • reverse 重覆執行時從反方向開始

property name範例

改變背景顏色

BackgroundColor
propertyName="BackgroundColor",改變背景顏色。
改變背景顏色從colorAccent到colorPrimary

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:propertyName="BackgroundColor"
    android:valueFrom="@color/colorAccent"
    android:valueTo="@color/colorPrimary" />

改變x軸位置

x

android:propertyName="x",改變x軸位置。
到x軸為100的地方

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:propertyName="x"
    android:valueTo="100"
    android:valueType="floatType" />

z軸旋轉

z

android:propertyName="rotation", z軸旋轉
z軸旋轉180度

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="500"
    android:propertyName="rotation"
    android:valueFrom="0"
    android:valueTo="180"
    android:valueType="floatType" />

放大

Scalex

android:propertyName="scaleX" ,X放大
x放大3倍

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:propertyName="scaleX"
    android:valueTo="3"
    android:valueType="floatType" />

Alpha 改變透明度

Alpha
android:propertyName=“alpha”,改變透明度

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="500"
    android:propertyName="alpha"
    android:valueTo="0.5f" />

使用set執行多個動畫

Set

在set裡放2個objectAnimator,執行多個動畫。
android:ordering="together" 同時執行
android:ordering="sequentially" 依序執行

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="together">
    <objectAnimator
        android:duration="2000"
        android:propertyName="x"
        android:valueTo="100"
        android:valueType="floatType" />
    <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="500"
        android:propertyName="alpha"
        android:valueFrom="1.0f"
        android:valueTo="0.5f" />
</set>

Activity 啟動動畫

animAlpha.setOnClickListener {
    startAnimator(R.animator.anim_alpha)
}

Property animation 到這裡大家應該會使用了,也看得出來跟View animation的差異,property animation著重在改變物件的屬性。而view animation 只是修改View的繪制效果,並沒有真的改變物件的屬性。下一篇我們將再將介紹使用程式碼來寫property animation及更深入的應用。

參考:
https://developer.android.com/reference/android/animation/ObjectAnimator
https://developer.android.com/guide/topics/resources/animation-resource#Property

完整程式:
https://github.com/evanchen76/PropertyAnimationSample


上一篇
Day05 動畫練習:Facebook like button
下一篇
Day07 Property animation 進階
系列文
Android animation 30天上手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言